home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BUG 1
/
BUGCD1996_0708.ISO
/
pc
/
util
/
minilin
/
minilin.exe
/
SBIN
/
REMOVEPK.{_6
< prev
next >
Wrap
Text File
|
1994-05-22
|
4KB
|
131 lines
#!/bin/sh
#
# Copyright 1994 Patrick Volkerding, Moorhead, Minnesota USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
TARGET_DIR=/
TMP=/tmp
ADM_DIR=$TARGET_DIR/var/adm
keep_files() {
while read FILE ; do
if [ -r "$TARGET_DIR/$FILE" -a ! -d "$TARGET_DIR/$FILE" ]; then
echo " --> $FILE was found in another package. Skipping."
fi
done
}
keep_links() {
while read LINK ; do
echo "Duplicate link. Not executing: $LINK"
done
}
delete_files() {
while read FILE ; do
if [ -r "$TARGET_DIR/$FILE" -a ! -d "$TARGET_DIR/$FILE" ]; then
if [ ! "$WARN" = "true" ]; then
echo " --> Deleting $FILE"
rm -f $TARGET_DIR/$FILE
else
echo " --> $FILE would be deleted"
fi
fi
done
}
delete_links() {
while read LINK ; do
echo "Unique link. Would execute: $LINK"
done
}
# Conversion to 'comm' utility by Mark Wisdom.
# is pretty nifty! :^)
remove_packages() {
for package_name in $1
do
echo
if [ -r $ADM_DIR/packages/$package_name ]; then
if [ ! "$WARN" = true ]; then
echo "Removing package $package_name..."
fi
if fgrep "./" $ADM_DIR/packages/$package_name 1> /dev/null 2>&1; then
TRIGGER=".\/"
else
TRIGGER="FILE LIST:"
fi
if [ ! "$WARN" = true ]; then
echo "Removing files:"
fi
sed -n "/$TRIGGER/,/^$/p" < $ADM_DIR/packages/$package_name | sort -u > $TMP/delete_list
# Pat's new-new && improved pre-removal routine.
for DIR in $ADM_DIR/removed_packages $ADM_DIR/removed_scripts ; do
if [ ! -d $DIR ] ; then mkdir -p $DIR ; chmod 755 $DIR ; fi
done
if [ "$WARN" = "true" ]; then
mv $ADM_DIR/packages/$package_name $TMP/$package_name 1> /dev/null 2>&1
else
mv $ADM_DIR/packages/$package_name $ADM_DIR/removed_packages 1> /dev/null 2>&1
fi
if [ -r $ADM_DIR/scripts/$package_name ]; then
cat $ADM_DIR/scripts/$package_name | fgrep 'rm -rf' | sort -u > $TMP/del_link_list
if [ "$WARN" = "true" ]; then
mv $ADM_DIR/scripts/$package_name $TMP/$package_name.script
else
mv $ADM_DIR/scripts/$package_name $ADM_DIR/removed_scripts 1> /dev/null 2>&1
fi
cat $ADM_DIR/scripts/* | fgrep 'rm -rf' | sort -u > $TMP/required_links
comm -12 $TMP/del_link_list $TMP/required_links | keep_links
comm -23 $TMP/del_link_list $TMP/required_links | delete_links
comm -23 $TMP/del_link_list $TMP/required_links > $TMP/delscript
if [ ! "$WARN" = "true" ]; then
( cd $TARGET_DIR ; sh $TMP/delscript )
fi
rm -f $TMP/del_link_list $TMP/required_links $TMP/delscript
fi
cat $ADM_DIR/packages/* | sort -u > $TMP/required_files
comm -12 $TMP/delete_list $TMP/required_files | keep_files
comm -23 $TMP/delete_list $TMP/required_files | delete_files
rm -f $TMP/delete_list $TMP/required_files
if [ "$WARN" = "true" ]; then
mv $TMP/$package_name $ADM_DIR/packages/$package_name
if [ -r $TMP/$package_name.script ]; then
mv $TMP/$package_name.script $ADM_DIR/scripts/$package_name
fi
fi
else
echo "No such package: $package_name. Can't remove."
fi
done
}
if [ "$1" = "-warn" ]; then
echo "Only warning... not actually removing any files."
echo "Here's what would be removed (and left behind) if you"
echo "removed the package(s):"
echo
WARN=true
shift 1
fi
remove_packages $*